//
//  SceneDelegate.swift
//  gamlify
//
//  Created by Admin on 2024/12/8.
//

import UIKit
import IQKeyboardManagerSwift

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
    
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        window = UIWindow(windowScene: windowScene)
        
        // Create view controllers for each tab
        let gamAIVC = GamAIViewController()
        gamAIVC.view.backgroundColor = .white
        gamAIVC.title = "GamAI"
        
        let discoverVC = UIViewController()
        discoverVC.view.backgroundColor = .white
        discoverVC.title = "Discover"
        
        let postVC = UIViewController()
        postVC.view.backgroundColor = .white
        postVC.title = "Post"
        
        let spectrumVC = UIViewController()
        spectrumVC.view.backgroundColor = .white
        spectrumVC.title = "Spectrum"
        
        let settingsVC = UIViewController()
        settingsVC.view.backgroundColor = .white
        settingsVC.title = "Settings"
        
        // Create FloatingTabBarController and set view controllers
        let tabBarController = FloatingTabBarController()
        tabBarController.viewControllers = [gamAIVC, discoverVC, postVC, spectrumVC, settingsVC].map { BaseNavigationController(rootViewController: $0)}
        tabBarController.delegate = self
        window?.rootViewController = tabBarController
        window?.makeKeyAndVisible()
        
        IQKeyboardManager.shared.isEnabled = true
    }
    
    func sceneDidDisconnect(_ scene: UIScene) {
        // Called as the scene is being released by the system.
        // This occurs shortly after the scene enters the background, or when its session is discarded.
        // Release any resources associated with this scene that can be re-created the next time the scene connects.
        // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
    }
    
    func sceneDidBecomeActive(_ scene: UIScene) {
        // Called when the scene has moved from an inactive state to an active state.
        // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
    }
    
    func sceneWillResignActive(_ scene: UIScene) {
        // Called when the scene will move from an active state to an inactive state.
        // This may occur due to temporary interruptions (ex. an incoming phone call).
    }
    
    func sceneWillEnterForeground(_ scene: UIScene) {
        // Called as the scene transitions from the background to the foreground.
        // Use this method to undo the changes made on entering the background.
    }
    
    func sceneDidEnterBackground(_ scene: UIScene) {
        // Called as the scene transitions from the foreground to the background.
        // Use this method to save data, release shared resources, and store enough scene-specific state information
        // to restore the scene back to its current state.
    }
    
    
}

extension SceneDelegate: UITabBarControllerDelegate {
    
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        if let navigationController = viewController as? UINavigationController {
            navigationController.delegate = self
        }
        
        
//        AppAPI.shared.getLatestBuildNumber()
//            .onSuccess { (distBuildNumber) in
//                let currentBuild = Int(Bundle.main.buildVersion) ?? 0
//                guard distBuildNumber > currentBuild else { return }
//                
//                let alert = UIAlertController(title: "Update available", message: "A new version of Magneto is available, you definitely should install it ;)", preferredStyle: .alert)
//                alert.addAction(title: "Update", style: .default) { _ in
//#if targetEnvironment(macCatalyst)
//                    let url = URL(string: "https://github.com/dvkch/Magneto/releases/")!
//#else
//                    let url = URL(string: "https://ota.syan.me/")!
//#endif
//                    UIApplication.shared.open(url, options: [:], completionHandler: nil)
//                }
//                alert.addAction(title: "Cancel", style: .cancel, handler: nil)
//                self.window?.rootViewController?.present(alert, animated: true, completion: nil)
//            }
//            .onFailure { (error) in
//                print("Couldn't download dist plist: \(error)")
//            }
    }
    
}

extension SceneDelegate: UINavigationControllerDelegate {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        guard let tab = window?.rootViewController as? FloatingTabBarController else { return }
        if navigationController.viewControllers.count > 1 {
            tab.hideFloatingTabBar()
        } else {
            tab.showFloatingTabBar()
        }
    }
}
